package cn.sc.summer.mybatis.aspect;

import cn.sc.summer.constant.mybatisplus.TenantInfo;
import cn.sc.summer.mybatis.annotation.TenantIgnore;
import cn.sc.summer.mybatis.context.TenantContextHolder;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;

/**
 * 忽略多租户的 Aspect
 */
@Aspect
public class TenantIgnoreAspect {

    @Around("@annotation(tenantIgnore)")
    public Object around(ProceedingJoinPoint joinPoint, TenantIgnore tenantIgnore) throws Throwable {
        TenantInfo tenantInfo = TenantContextHolder.getTenantInfo();
        try {
            TenantInfo newTenantInfo = new TenantInfo();
            newTenantInfo.setIgnoreTenant(Boolean.TRUE);
            TenantContextHolder.setTenantInfo(newTenantInfo);
            // 执行逻辑
            return joinPoint.proceed();
        } finally {
            TenantContextHolder.setTenantInfo(tenantInfo);
        }
    }

}
